#pragma once
#include <string>
#include <chrono>
#include <memory>
#include <nlohmann/json_fwd.hpp>  // 官方的前向声明头文件


// 日志级别枚举
enum class LogLevel {
    Trace = 0,
    Debug,
    Info,
    Warn,
    Error,
    Critical,
    Off // 关闭所有日志
};
    

// 日志条目结构体：封装所有需要记录的信息

struct LogEntry {
    LogLevel level;
    std::string message;
    std::chrono::system_clock::time_point timestamp;  // 新增记录时间戳
    std::unique_ptr<nlohmann::json> context;

    // 线程id
    uint64_t thread_id;

    // 添加trace_id 和 span_id字段
    std::string trace_id;
    std::string span_id;
    
    LogEntry(); // 默认构造函数
    ~LogEntry();
    LogEntry(const LogEntry& other); // 默认拷贝构造函数
    LogEntry(LogEntry&& other) noexcept; // 默认移动构造函数
    LogEntry& operator=(const LogEntry& other); // 默认拷贝赋值运算符
    LogEntry& operator=(LogEntry&& other) noexcept; // 默认移动赋值运算符
};

